با مدیریت همگامسازی دورهای فرانتاند آشنا شوید، رویکردی جامع برای مدیریت وظایف پسزمینه، بهبود عملکرد و ارتقاء تجربه کاربری در برنامههای وب مدرن. با بهترین شیوهها و مثالهای واقعی آشنا شوید.
مدیریت همگامسازی دورهای فرانتاند: تسلط بر هماهنگی وظایف پسزمینه
در دنیای پویای توسعه وب، تضمین تجربههای کاربری بینقص از اهمیت بالایی برخوردار است. برنامههای وب مدرن اغلب نیاز به انجام وظایف پسزمینه مانند همگامسازی داده، بهروزرسانی محتوا و اعلانهای زمانبندی شده دارند، بدون اینکه جریان کار کاربر مختل شود. مدیریت همگامسازی دورهای فرانتاند یک راهحل قوی برای هماهنگی این وظایف پسزمینه به طور کارآمد و مؤثر ارائه میدهد. این راهنمای جامع به بررسی مفهوم همگامسازی دورهای، مزایای آن، استراتژیهای پیادهسازی و بهترین شیوهها برای ساخت برنامههای وب با عملکرد بالا میپردازد.
درک همگامسازی دورهای
همگامسازی دورهای به برنامههای وب، بهویژه برنامههای وب پیشرو (PWAs)، اجازه میدهد تا دادهها را در پسزمینه در فواصل زمانی منظم همگامسازی کنند. این قابلیت برای حفظ محتوای بهروز، ارائه عملکرد آفلاین و ارائه یک تجربه کاربری واکنشگرا، حتی در محیطهایی با اتصال شبکه متناوب، بسیار مهم است. API همگامسازی پسزمینه دورهای، بخشی از مجموعه API سرویس ورکر، توسعهدهندگان را قادر میسازد تا وظایفی را زمانبندی کنند که به طور مستقل از رشته اصلی اجرا میشوند و حداقل تأثیر را بر عملکرد برنامه میگذارند.
مزایای همگامسازی دورهای
- بهبود تجربه کاربری: محتوا را تازه و مرتبط نگه دارید، و آخرین اطلاعات را بدون بهروزرسانی دستی در اختیار کاربران قرار دهید.
- عملکرد آفلاین: به کاربران امکان دسترسی و تعامل با دادههای ذخیره شده را حتی در حالت آفلاین بدهید، و قابلیت استفاده از برنامه را در شرایط مختلف شبکه افزایش دهید.
- بهبود عملکرد: همگامسازی داده و سایر وظایف سنگین را به پسزمینه منتقل کنید، بار روی رشته اصلی را کاهش دهید و پاسخدهی کلی برنامه را بهبود بخشید.
- کاهش مصرف داده: همگامسازی داده را با انتقال فقط بهروزرسانیهای لازم، بهینهسازی کنید و مصرف پهنای باند و هزینههای مربوطه را به حداقل برسانید.
- افزایش تعامل: اعلانها و بهروزرسانیهای بهموقع ارائه دهید، کاربران را مطلع نگه دارید و با برنامه درگیر کنید.
پیادهسازی مدیریت همگامسازی دورهای فرانتاند
پیادهسازی مدیریت همگامسازی دورهای فرانتاند شامل چندین مرحله کلیدی است، از جمله ثبت یک سرویس ورکر، درخواست مجوز، زمانبندی رویدادهای همگامسازی دورهای و رسیدگی به فرآیند همگامسازی. در زیر دستورالعملهای دقیق و مثالهای کد برای راهنمایی شما در فرآیند پیادهسازی آورده شده است.
مرحله 1: ثبت یک سرویس ورکر
اولین قدم ثبت یک سرویس ورکر است که به عنوان یک پروکسی بین برنامه وب و شبکه عمل میکند. سرویس ورکر درخواستهای شبکه را رهگیری میکند، داراییها را ذخیره میکند و وظایف پسزمینه را مدیریت میکند. برای ثبت یک سرویس ورکر، کد زیر را به فایل اصلی جاوا اسکریپت خود اضافه کنید:
if ('serviceWorker' in navigator) {
navigator.serviceWorker.register('/service-worker.js')
.then(registration => {
console.log('Service Worker registered with scope:', registration.scope);
})
.catch(error => {
console.error('Service Worker registration failed:', error);
});
}
مرحله 2: درخواست مجوزها
قبل از زمانبندی رویدادهای همگامسازی دورهای، باید مجوزهای لازم را از کاربر درخواست کنید. مجوز `periodicSync` به سرویس ورکر اجازه میدهد تا وظایف همگامسازی پسزمینه را انجام دهد. کد زیر را به فایل سرویس ورکر خود اضافه کنید:
self.addEventListener('activate', async event => {
try {
const status = await navigator.permissions.query({ name: 'periodic-background-sync' });
if (status.state === 'granted') {
console.log('Periodic Background Sync permission granted.');
} else {
console.warn('Periodic Background Sync permission not granted.');
}
} catch (error) {
console.error('Error querying Periodic Background Sync permission:', error);
}
});
مرحله 3: زمانبندی رویدادهای همگامسازی دورهای
هنگامی که مجوزهای لازم را دریافت کردید، میتوانید رویدادهای همگامسازی دورهای را با استفاده از متد `register` شیء `periodicSync` زمانبندی کنید. این متد یک نام تگ منحصر به فرد و یک شیء اختیاری options را میگیرد که حداقل فاصله بین رویدادهای همگامسازی را مشخص میکند. کد زیر را به فایل سرویس ورکر خود اضافه کنید:
self.addEventListener('activate', async event => {
// ... (previous permission check)
try {
await self.registration.periodicSync.register('content-sync', {
minInterval: 24 * 60 * 60 * 1000, // 24 hours
});
console.log('Periodic Sync registered successfully with tag: content-sync');
} catch (error) {
console.error('Error registering Periodic Sync:', error);
}
});
در این مثال، تگ `content-sync` برای شناسایی رویداد همگامسازی دورهای استفاده میشود، و گزینه `minInterval` روی 24 ساعت تنظیم شده است، و اطمینان حاصل میشود که وظیفه همگامسازی حداقل یک بار در روز اجرا میشود.
مرحله 4: رسیدگی به فرآیند همگامسازی
هنگامی که یک رویداد همگامسازی دورهای فعال میشود، سرویس ورکر یک رویداد `periodicsync` دریافت میکند. میتوانید با افزودن یک شنونده رویداد به فایل سرویس ورکر خود، این رویداد را مدیریت کنید. در داخل شنونده رویداد، میتوانید وظایف همگامسازی لازم را انجام دهید، مانند دریافت داده از سرور، بهروزرسانی کش و نمایش اعلانها.
self.addEventListener('periodicsync', event => {
if (event.tag === 'content-sync') {
event.waitUntil(syncContent());
}
});
async function syncContent() {
try {
const response = await fetch('/api/content');
const content = await response.json();
// Store content in cache (e.g., using Cache API or IndexedDB)
const cache = await caches.open('content-cache');
await cache.put('/content-data', new Response(JSON.stringify(content)));
console.log('Content synchronized successfully.');
// Optional: Display a notification to the user
self.registration.showNotification('Content Updated', {
body: 'New content is available!',
icon: '/icon.png'
});
} catch (error) {
console.error('Error synchronizing content:', error);
// Handle error (e.g., retry later)
}
}
در این مثال، تابع `syncContent` آخرین محتوا را از سرور دریافت میکند، آن را در کش ذخیره میکند و یک اعلان به کاربر نمایش میدهد. متد `event.waitUntil` تضمین میکند که سرویس ورکر تا زمانی که وظیفه همگامسازی کامل شود، فعال باقی میماند.
بهترین شیوهها برای مدیریت همگامسازی دورهای فرانتاند
برای به حداکثر رساندن اثربخشی مدیریت همگامسازی دورهای فرانتاند، بهترین شیوههای زیر را در نظر بگیرید:
- بهینهسازی همگامسازی داده: میزان دادههای منتقل شده در طول همگامسازی را با دریافت فقط بهروزرسانیهای لازم و استفاده از تکنیکهای فشردهسازی داده کارآمد به حداقل برسانید.
- پیادهسازی رسیدگی به خطا: رسیدگی به خطای قوی را برای رسیدگی مناسب به خطاهای شبکه، خطاهای سرور و سایر مسائل غیرمنتظره پیادهسازی کنید. از مکانیزمهای تلاش مجدد و استراتژیهای پسگیری نمایی استفاده کنید تا اطمینان حاصل شود که وظایف همگامسازی در نهایت با موفقیت انجام میشوند.
- احترام به ترجیحات کاربر: به کاربران اجازه دهید فرکانس و زمانبندی وظایف همگامسازی را کنترل کنند. گزینههایی را برای غیرفعال کردن همگامسازی دورهای یا تنظیم فاصله همگامسازی بر اساس ترجیحات آنها ارائه دهید.
- نظارت بر عملکرد: عملکرد مدیریت همگامسازی دورهای فرانتاند خود را برای شناسایی و رفع هرگونه گلوگاه عملکردی نظارت کنید. از ابزارهای توسعهدهنده مرورگر و پلتفرمهای تجزیه و تحلیل برای ردیابی زمانهای همگامسازی، نرخ خطا و مصرف منابع استفاده کنید.
- تست کامل: مدیریت همگامسازی دورهای فرانتاند خود را در شرایط مختلف شبکه، از جمله محیطهای آفلاین، آزمایش کنید تا اطمینان حاصل شود که به درستی کار میکند و یک تجربه کاربری بینقص را ارائه میدهد.
- در نظر گرفتن عمر باتری: مراقب مصرف باتری باشید، به خصوص در دستگاههای تلفن همراه. از فواصل همگامسازی مکرر که میتوانند باتری را به سرعت خالی کنند، خودداری کنید.
تکنیکها و ملاحظات پیشرفته
استفاده از API بازیابی پسزمینه
برای دانلود فایلهای بزرگ یا داراییها در پسزمینه، استفاده از API بازیابی پسزمینه را در نظر بگیرید. این API به شما امکان میدهد دانلودها را در پسزمینه آغاز و مدیریت کنید، حتی زمانی که کاربر مرورگر را میبندد یا از صفحه دور میشود. API بازیابی پسزمینه بهروزرسانیهای پیشرفت و اعلانها را ارائه میدهد و به شما امکان میدهد کاربران را از وضعیت دانلود مطلع نگه دارید.
ادغام با اعلانهای فشاری
همگامسازی دورهای را با اعلانهای فشاری ترکیب کنید تا بهروزرسانیها و اعلانهای بهموقع را به کاربران ارائه دهید، حتی زمانی که برنامه در پیشزمینه اجرا نمیشود. از همگامسازی دورهای برای بررسی محتوای جدید یا بهروزرسانیها استفاده کنید و سپس یک اعلان فشاری را برای هشدار به کاربر فعال کنید. مراقب ترجیحات کاربر باشید و از ارسال اعلانهای بیش از حد یا نامربوط خودداری کنید.
رسیدگی به تضادهای داده
هنگام همگامسازی داده بین کلاینت و سرور، رسیدگی به تضادهای احتمالی داده مهم است. استراتژیهای حل تضاد، مانند آخرین نوشتن برنده میشود یا قفلگذاری خوشبینانه را پیادهسازی کنید تا از سازگاری و یکپارچگی داده اطمینان حاصل کنید. مکانیزمهایی را برای کاربران فراهم کنید تا در صورت لزوم تضادها را به صورت دستی حل کنند.
بینالمللیسازی و محلیسازی
هنگام توسعه برنامهها برای مخاطبان جهانی، بینالمللیسازی و محلیسازی را در نظر بگیرید. اطمینان حاصل کنید که مدیریت همگامسازی دورهای فرانتاند شما از چندین زبان و منطقه پشتیبانی میکند. از فایلهای منبع یا خدمات ترجمه برای ارائه محتوای محلی شده و اعلانها استفاده کنید.
مثال: رسیدگی به مناطق زمانی در زمانبندی هنگام زمانبندی وظایفی که به زمان حساس هستند، توجه به مناطق زمانی مختلف بسیار مهم است. یک راه حل ساده این است که همه زمان ها را در UTC ذخیره کنید و آنها را به زمان محلی کاربر در داخل برنامه تبدیل کنید. شیء `Date` جاوا اسکریپت، همراه با کتابخانه هایی مانند Moment.js یا date-fns، می تواند این تبدیل ها را تسهیل کند.
// Store the scheduled time in UTC
const scheduledTimeUTC = '2024-10-27T10:00:00Z';
// Convert to the user's local time
const scheduledTimeLocal = moment.utc(scheduledTimeUTC).local().format('YYYY-MM-DD HH:mm:ss');
console.log('Scheduled Time (UTC):', scheduledTimeUTC);
console.log('Scheduled Time (Local):', scheduledTimeLocal);
این قطعه نشان می دهد که چگونه از Moment.js برای تبدیل زمان UTC به زمان محلی کاربر استفاده کنید، و اطمینان حاصل کنید که وظایف برنامه ریزی شده در زمان صحیح بدون توجه به مکان کاربر اجرا می شوند. در نظر داشته باشید از روش های مشابه در پیاده سازی همگام سازی دوره ای خود برای رسیدگی دقیق به روزرسانی های حساس به زمان استفاده کنید.
مثالهای واقعی
برنامه گردآورنده اخبار
یک برنامه گردآورنده اخبار میتواند از مدیریت همگامسازی دورهای فرانتاند برای همگامسازی آخرین مقالات خبری از منابع مختلف در پسزمینه استفاده کند. این برنامه میتواند رویدادهای همگامسازی دورهای را برای دریافت مقالات جدید و بهروزرسانی کش زمانبندی کند، و اطمینان حاصل کند که کاربران همیشه به آخرین اخبار دسترسی دارند، حتی در حالت آفلاین. از اعلانهای فشاری میتوان برای هشدار به کاربران در هنگام در دسترس بودن مقالات جدید استفاده کرد.
برنامه تجارت الکترونیک
یک برنامه تجارت الکترونیک میتواند از مدیریت همگامسازی دورهای فرانتاند برای همگامسازی کاتالوگ محصولات، قیمتها و سطوح موجودی در پسزمینه استفاده کند. این برنامه میتواند رویدادهای همگامسازی دورهای را برای دریافت آخرین دادههای محصول و بهروزرسانی کش زمانبندی کند، و اطمینان حاصل کند که کاربران همیشه به اطلاعات دقیق محصول دسترسی دارند. از اعلانهای فشاری میتوان برای هشدار به کاربران در هنگام اضافه شدن محصولات جدید یا کاهش قیمتها استفاده کرد.
برنامه رسانههای اجتماعی
یک برنامه رسانههای اجتماعی میتواند از مدیریت همگامسازی دورهای فرانتاند برای همگامسازی پستهای جدید، نظرات و لایکها در پسزمینه استفاده کند. این برنامه میتواند رویدادهای همگامسازی دورهای را برای دریافت آخرین دادههای رسانههای اجتماعی و بهروزرسانی کش زمانبندی کند، و اطمینان حاصل کند که کاربران همیشه به آخرین محتوا دسترسی دارند. از اعلانهای فشاری میتوان برای هشدار به کاربران در هنگام دریافت نظرات یا لایکهای جدید استفاده کرد.
برنامه مدیریت وظایف
یک برنامه مدیریت وظایف که توسط تیم هایی در سراسر جهان استفاده می شود، می تواند از همگام سازی دوره ای برای اطمینان از اینکه لیست وظایف همیشه به روز است، استفاده کند. به عنوان مثال، یکی از اعضای تیم در توکیو وظیفه ای را در ساعت 9:00 صبح JST به پایان می رساند. مدیریت همگام سازی دوره ای تضمین می کند که این به روز رسانی در دستگاه های اعضای تیم در لندن، نیویورک و سیدنی در یک بازه زمانی معقول، با در نظر گرفتن شرایط مختلف شبکه منعکس می شود. فرکانس همگام سازی را می توان بر اساس فعالیت کاربر یا در دسترس بودن شبکه تنظیم کرد تا مصرف باتری و مصرف داده بهینه شود.
ابزارها و کتابخانهها
- Workbox: مجموعهای از کتابخانهها و ابزارهایی که توسعه PWAها، از جمله سرویس ورکرها و همگامسازی دورهای را ساده میکنند. Workbox APIها و انتزاعهای سطح بالایی را ارائه میدهد که مدیریت کش، مسیریابی و وظایف پسزمینه را آسانتر میکنند.
- PWA Builder: ابزاری که به شما کمک میکند برنامه وب موجود خود را به یک PWA تبدیل کنید. PWA Builder به طور خودکار یک سرویس ورکر و فایل مانیفست ایجاد میکند و راهنماییهایی را در مورد پیادهسازی بهترین شیوهها برای PWAها ارائه میدهد.
- Lighthouse: یک ابزار ممیزی که عملکرد، دسترسی و SEO برنامه وب شما را تجزیه و تحلیل میکند. Lighthouse توصیههایی را برای بهبود کیفیت و عملکرد برنامه شما ارائه میدهد.
نتیجهگیری
مدیریت همگامسازی دورهای فرانتاند یک ابزار قدرتمند برای ساخت برنامههای وب با عملکرد بالا است که یک تجربه کاربری بینقص را ارائه میدهد، حتی در محیطهایی با اتصال شبکه متناوب. با پیادهسازی همگامسازی دورهای، میتوانید محتوا را تازه و مرتبط نگه دارید، عملکرد آفلاین را ارائه دهید و پاسخدهی کلی برنامه را افزایش دهید. با پیروی از بهترین شیوههای ذکر شده در این راهنما، میتوانید اثربخشی مدیریت همگامسازی دورهای فرانتاند خود را به حداکثر برسانید و تجربههای کاربری استثنایی را به مخاطبان جهانی خود ارائه دهید.به طور خلاصه، مدیریت همگامسازی دورهای فرانتاند فقط یک پیادهسازی فنی نیست. بلکه یک رویکرد استراتژیک برای افزایش تعامل کاربر، ارائه پشتیبانی آفلاین و بهینهسازی استفاده از داده است. توسعهدهندگان با درک اصول آن و اعمال بهترین شیوهها، میتوانند برنامههای وب واقعاً جهانی ایجاد کنند که با کاربران در سراسر جهان طنینانداز شود.
پرسشهای متداول
چه اتفاقی میافتد اگر کاربر مجوز periodic-background-sync را ندهد؟
اگر کاربر این مجوز را ندهد، متد `register` یک خطا پرتاب میکند. شما باید این خطا را به خوبی مدیریت کنید، به کاربر اطلاع دهید که این ویژگی بدون مجوز کار نخواهد کرد و به طور بالقوه دستورالعملهایی را در مورد نحوه اعطای آن در تنظیمات مرورگرشان ارائه دهید.
هر چند وقت یک بار باید رویدادهای همگامسازی دورهای را زمانبندی کنم؟
فرکانس رویدادهای همگامسازی بستگی به الزامات خاص برنامه شما و اهمیت بهروز نگه داشتن دادهها دارد. تأثیر آن بر عمر باتری و مصرف داده را در نظر بگیرید. با یک فاصله طولانیتر (مثلاً 24 ساعت) شروع کنید و به تدریج آن را در صورت نیاز کاهش دهید، در حالی که عملکرد و بازخورد کاربر را زیر نظر دارید. به یاد داشته باشید که `minInterval` یک *حداقل* است – مرورگر ممکن است بر اساس فعالیت کاربر و شرایط دستگاه، کمتر همگامسازی کند.
آیا میتوانم از همگامسازی دورهای بدون سرویس ورکر استفاده کنم؟
خیر، همگامسازی دورهای یکی از ویژگیهای API سرویس ورکر است و برای ثبت و فعال شدن به یک سرویس ورکر نیاز دارد.
همگامسازی دورهای چه تفاوتی با بازیابی پسزمینه دارد؟
همگامسازی دورهای برای همگامسازی داده در فواصل زمانی منظم طراحی شده است، در حالی که بازیابی پسزمینه برای دانلود فایلهای بزرگ یا داراییها در پسزمینه طراحی شده است. همگامسازی دورهای معمولاً برای بهروز نگه داشتن محتوا استفاده میشود، در حالی که بازیابی پسزمینه برای دانلود منابعی استفاده میشود که کاربر بعداً به آنها نیاز خواهد داشت.
آیا همگامسازی دورهای توسط همه مرورگرها پشتیبانی میشود؟
پشتیبانی از همگامسازی دورهای هنوز در حال تکامل است. در حالی که توسط اکثر مرورگرهای مدرن (Chrome، Edge، Firefox، Safari) پشتیبانی میشود، مرورگرهای قدیمیتر یا آنهایی که تنظیمات حریم خصوصی خاصی دارند ممکن است به طور کامل از آن پشتیبانی نکنند. همیشه قبل از پیادهسازی همگامسازی دورهای در برنامه خود، سازگاری مرورگر فعلی را بررسی کنید. باید از تکنیکهای افزایش پیشرونده برای ارائه یک مکانیزم بازگشت برای مرورگرهایی که از API پشتیبانی نمیکنند، استفاده شود.
چگونه میتوانم عملکرد همگامسازی دورهای را آزمایش کنم؟
میتوانید با استفاده از ابزارهای توسعهدهنده مرورگر، عملکرد همگامسازی دورهای را آزمایش کنید. به عنوان مثال، در Chrome، میتوانید از پنل Application برای فعال کردن دستی یک رویداد همگامسازی دورهای یا شبیهسازی شرایط مختلف شبکه استفاده کنید. تب Service Workers به شما امکان میدهد وضعیت سرویس ورکر را بررسی کنید و بر فعالیت آن نظارت کنید.
پیامدهای امنیتی استفاده از همگامسازی دورهای چیست؟
همگامسازی دورهای مانند هر API وب، پیامدهای امنیتی بالقوهای دارد. اطمینان حاصل کنید که فقط دادهها را از منابع مورد اعتماد همگامسازی میکنید و از پروتکلهای ارتباطی ایمن (HTTPS) استفاده میکنید. مراقب حریم خصوصی دادهها باشید و از مقررات مربوطه مانند GDPR و CCPA پیروی کنید.
مرورگر چگونه تعیین می کند چه زمانی همگام سازی را در واقع انجام دهد؟
مرورگر در تعیین *زمان* انجام واقعی همگام سازی، حتی اگر `minInterval` مشخص شده باشد، آزادی عمل قابل توجهی دارد. این بستگی به عواملی مانند: فعالیت کاربر، اتصال به شبکه، وضعیت باتری و اینکه آیا سایت اخیراً با آن تعامل داشته است یا خیر. مرورگر سعی می کند فرکانس همگام سازی را برای بهترین تعادل بین عملکرد، عمر باتری و تجربه کاربر بهینه کند. شما نمی توانید *تضمین* کنید که یک همگام سازی دقیقاً در فاصله زمانی مشخص شده رخ می دهد، فقط اینکه *زودتر* از آن اتفاق نمی افتد.
اگر به کنترل بیشتری نیاز داشته باشم، جایگزین های همگام سازی دوره ای چیست؟
در حالی که همگام سازی دوره ای راحتی را ارائه می دهد، ممکن است در سناریوهای خاص به کنترل بیشتری نیاز داشته باشید. جایگزین ها عبارتند از:
- WebSockets: برای ارتباط دو طرفه و در زمان واقعی بین کلاینت و سرور. ایده آل برای برنامه هایی که به روز رسانی های فوری نیاز دارند.
- Server-Sent Events (SSE): برای به روز رسانی های یک طرفه (از سرور به کلاینت). ساده تر از WebSockets برای سناریوهایی که کلاینت نیازی به ارسال داده به عقب ندارد.
- وظایف پس زمینه (با استفاده از workers اختصاصی): می توانید یک Web Worker اختصاصی یا یک Shared Worker ایجاد کنید که وظایف را مستقل از Service Worker یا رشته اصلی انجام می دهد. این امکان برنامه ریزی فرآیندهای پس زمینه سفارشی را فراهم می کند، اما نیاز به پیاده سازی پیچیده تری دارد.
- ترکیبی از APIها: ترکیب APIهای ساده تر مانند `fetch` با ابزارهای زمان بندی می تواند کنترل دقیق تری را ارائه دهد.
همگام سازی دوره ای چگونه انواع مختلف دستگاه ها (رومیزی در مقابل موبایل) را مدیریت می کند؟
پیاده سازی مرورگر اساسی تفاوت های بین دستگاه های رومیزی و موبایل را مدیریت می کند. برای دستگاه های تلفن همراه، مرورگر در صرفه جویی در مصرف باتری و پهنای باند تهاجمی تر عمل می کند. بنابراین، همگام سازی دوره ای ممکن است در دستگاه های تلفن همراه در مقایسه با دسکتاپ کمتر اتفاق بیفتد. هنگام طراحی برنامه خود این را در نظر داشته باشید و فرکانسهای همگامسازی را انتخاب کنید که برای هر دو نوع دستگاه مناسب باشد. آزمایش بر روی هر دو نوع دستگاه بسیار مهم است.
مثال: همگامسازی دورهای با نوار پیشرفت
برای اینکه به کاربر نشان دهید محتوا در حال همگامسازی است، میتوانید یک نوار پیشرفت را نمایش دهید. در اینجا یک مثال ساده است:
self.addEventListener('periodicsync', event => {
if (event.tag === 'content-sync') {
event.waitUntil(syncContent());
}
});
async function syncContent() {
try {
// Show progress bar
showProgressBar();
const response = await fetch('/api/content');
const total = response.headers.get('Content-Length');
let loaded = 0;
const reader = response.body.getReader();
while (true) {
const { done, value } = await reader.read();
if (done) {
break;
}
loaded += value.length;
const progress = loaded / total;
updateProgressBar(progress);
// Process the data (example: cache the chunk)
// ...
}
// Hide progress bar
hideProgressBar();
} catch (error) {
console.error('Error synchronizing content:', error);
// Handle error (e.g., retry later)
hideProgressBar();
}
}
توجه: توابع `showProgressBar()`، `updateProgressBar(progress)` و `hideProgressBar()` باید به طور جداگانه در برنامه شما (به احتمال زیاد در اسکریپت اصلی شما) تعریف شوند. استفاده از `response.body.getReader()` امکان خواندن افزایشی داده ها و به روز رسانی یک نشانگر پیشرفت را فراهم می کند.